//#######################################################################################
//初始化配置SIv4.0
//##################################################################################

//1.sourceinsight　screen font　的默认字体是Verdana的，它是一直变宽字体。在Document style中可以将字体改为定宽的Courier 
//
//2.勾掉indent OpenBrace和Indent Close Brace的效果: 继上一段，在相对缩进行里, 如果输入"{"或"}", 则自动和上一行列对齐 
//
//3.今天把一个用sourceinsight排版整齐的C文件，偶然用VC打开一看，全乱了。研究了半天，发现SI对每个字符的宽度不太一致。发现选上"view --> draftview"， 就可以让每个字符的宽度一致了。快捷键是 "Alt + F12"
//
//4.选中几行代码按tab键或者shift+tab可以左右移动代码，调整代码时很有用。
//
//配置成简单好用的c/Java代码编辑器
//　　1、缩进与tab
//　　（1）Options菜单PreferencesTyping卡，勾掉下面两项∶
//　　Typing tab indents line，regardless of selection，空行按tab无法前进
//　　Typing tab replaces current selection，选定部分内容、再按tab时会清除所选
//　　（2）Options菜单Document Options（针对不同文件类型，分别进行设置）下拉左上文件类型框、选择合适类型（c源文件）Editing Options框中，tab width=2Editing Options框中，勾选Expand tabs（这样，按tab键、等价于输入2个空格）
//　　（3）Options菜单Document Options选择合适的文件类型点击右边中间的Auto Indent钮在弹出的框中，左边一定要点Smart，右边有两个复选框Indent Open Brace和Indent CloseBrace，具体效果可以看SIS的HELP。按照部门里的编程风格要求，最方便的就是把两个复选框都取消掉，然后点OK。
//　　勾选Auto Indent之SMART的效果∶在C程序里, 如果遇到行末没有分号的语句,如IF, WHILE, SWITCH等, 写到该行末按回车，则新行自动相对上一行缩进两列。
//　　勾掉Indent Open Brace和Indent Close Brace的效果∶继上一段，在相对缩进行里, 如果输入"}", 则自动和上一行列对齐（好像勾不勾都会有这个功能）；而输入"{"时，不会与下面的行对齐（这是勾上Indent Open Brace时的效果）。
//　　2、向项目中添加文件时，只添加特定类型的文件（文件类型过滤器）
//　　有个同事比较生猛，得整汇编代码，但在SIS里建立PROJECT并ADD TREE的时候，根据默认设置并不会把该TREE里面所有汇编文件都包含进来，只加了.inc和.asm后缀的，.s后缀的没有。而且用SIS打开.s的文件，一片黑白没有色彩，感觉回到DOS的EDIT时代了……解决方法是在Options->Document Options里面，点左上的Document Type下拉菜单，选择x86 Asm Source File，然后在右边的File filter里*.asm；*.inc；的后面加上*.s；接着CLOSE就可以了。上面两个问题解决了，但注意加入*.s后还需要重新ADD TREE一遍才能把这些汇编加到PROJECT里面。
//　　3、去掉功能强大但是无用的自动完成功能
//　　Options菜单Preferences Typing卡Auto Completion框，勾掉Use automaticsymbol completion window（这里是SIS的全局设置）
//　　Options菜单Document OptionsEditing Options框中，勾掉Allow auto-complete（局部设置）
//　　上面两项必须全部勾选，才能启用Auto Completion功能
//　　4、恢复小键盘的“+，-，*，/”功能
//　　Options菜单Key assignments，通过关键词Scroll 找到Scroll Half Page Up，取消小键盘/；通过关键词Scroll 找到Scroll Half Page Down取消小键盘*；通过关键词Function找到Function Up，取消小键盘-，通过关键词Function找到Function down，取消小键盘+。
//　　5、恢复ctrl+a的全选功能
//　　通过关键词save 找到save all，更改为ctrl+shift+a，通过关键词select找到select all，更改为ctrl +a
//　　6、解决字符等宽对齐问题。
//　　SIS默认字体是VERDANA，很漂亮。这网页上应该也是用的VERDANA字体。但由于美观的缘故，VERDANA字体是不等宽的。比如下面两行
//　　llllllllll
//　　MMMMMMMMMM
//　　同样10个字符，长度差多了.用VERDANA来看程序，有些本应该对齐的就歪了。解放方法是使用等宽的字体，但肯定比较丑。可以用DOS字体，也就是记事本里的默认字体sysfixed 很丑，要有心理准备。比较推荐的是用Courier New。
//　　SourceInsight提供的功能
//　　1、解析日志信息时非常有用的Source Link
//　　总地说来，SourceLink根据特定的搜索模式，把当前文件中满足模式的行、链接到由该行指定的其他源文件中。
//　　所谓特定的搜索模式，共有两种“File, then line”和“Line, then file”，其中前后两部分依靠正则表达式的组的概念来予以分割。如果当前文件具有匹配行，比如“Error d:tcsrcq5.c 18: Lvalue required in function jsSort”，那么SourceInsight在该行创建SourceLink、把该行链接到由该行指定的文件中（即d:tcsrcq5.c，第18行）。
//　　1.1 创建SourceLink
//　　运行Search菜单的Parse Source Links…命令，在弹出的框中、选择搜索模式、并填入相应的正则表达式串，点OK，SIS就会解析当前文件，如果有匹配，就创建SourceLink。
//　　1.2 在解析日志信息时，使用SourceLink
//　　可以打开日志信息，运行Parse Source Links命令，日志中能够匹配模式的每一行（通常是含有错误信息的行）、就会被设置上一个SourceLink
//　　1.3在解析自定义命令输出时，使用SourceLink
//　　首先勾选Custom Command 中的“Parse Links in Output”，然后选择特定的搜索模式，最后填入合适的正则表达式。这样，Source Insight把输出信息作为当前搜索用文件；并且，如果有匹配行（通常即编译错误信息行），SIS为该行创建SourceLink、并把每一个错误信息中给定的文件（和行号）作为link目的地，这对于我们修改源代码错误非常有帮助。
//　　2、替换（Replace）VS 上下文敏感的智能重命名（Context-Sensitive Smart Rename）
//　　2.1 替换（Replace）
//　　目前来说，普通的替换命令、快捷键为ctrl+H，足以已满足工作要求。
//　　在弹出的替换窗口中，在Search框中勾选Selection来只在所选文本区域中替换（当然这时你要先选定区域然后再按ctrl+H）、勾选WholeFile来在整个当前文件内替换、两者都不勾选来从当前光标处替换至文件末尾；点右边的Files…按钮，可选择替换多个文件的内容。
//　　2.2上下文敏感的智能重命名（Context-Sensitive Smart Rename）
//　　Smart Rename命令、快捷键是Ctrl+’，是上下文敏感的全局搜索替换。它可以智能地重命名全部项目文件中的一个标示符。SourceInsight的搜索索引（search index）使得搜索过程进行地非常快。而且，使用Smart Rename所做的替换会被记录在Search Results窗口中，每一条替换记录旁有一个SourceLink链接到替换发生地文件。
//　　Smart Rename可以用来重命名标记（symbol）。如果勾选了Smart Reference Matching选项，Smart Rename就只在正确的上下文范围内进行重命名。它可以智能地重命名全部项目文件中的一个标示符；它可以重命名函数本地变量，类或结构体成员、函数。
//　　在弹出的Smart Rename窗口中有下面几项∶
//　　Old Name填旧名称。光标下的词会被自动加载；光标的位置非常重要，这是因为Source Insight会根据本地上下文背景、准确地确定你想要重命名哪一个标记。
//　　推荐只填单个词、而不是字符串。
//　　如果你在命名成员变量、或本地变量（），Old Name框中会显示完全标记名、即上层容器名+标记名。例如，框中的“DocDraw.paintStruc”代表DocDraw是函数名，paintStruc是函数的本地成员变量。
//　　New Name填新名称。只填标记名，不填上层容器名。
//　　Output Search Results如果勾选，搜索替换结果日志会被输出到Search Results窗口中。可以通过Windows菜单来切换，或ctrl+tab切换察看。并且每一条记录旁会有SourceLink链接到替换发生地文件。
//　　Confirm Each Replacement每次替换询问。
//　　Skip Comments不重名注释部分。
//　　【使用心得列表】
//　　（１）如何用Smart Rename重命名数组的数组名？如果只选取数组名，会报错！
//　　（２）如果勾掉Smart Reference Matching，会搜索全部项目文件，并且Old Name框中不显示完全限定名；如果勾选Smart Reference Matching，无法重命名数组名，而且鼠标位置不正确时会报错。应该如何应对？
//     3、自定义命令
//　　自定义命令与项目相关，在一个项目中定义的所有自定义命令属于该项目、只对该项目有效（包括快捷键等）。
//　　自定义命令类似于命令行批处理文件。SIS允许自定义命令在后台运行；并可以捕捉自定义命令的输出、放置于文件中、或粘贴入当前光标插入点。
//　　分别利用上面SIS对输出信息的处理方式，自定义命令对集成编译器相当有用，可以捕捉编译器输出并创建SourceLink寻错；自定义命令对于文本过滤也相当有用，可选中待过滤区块、运行Sort自定义命令、粘贴回选定区块、即完成文本过滤。
//　　请按下面步骤创建自定义命令∶
//　　Options菜单Custom Command
//点右边Add钮、填入新自定义命令名称，或下拉左边Commands、选择命令进行修改
//Run框、填入待执行命令行，可含有特殊元字符，见后面的元字符表 Dir框、执行命令行时应处的目录，如不填，以源代码文件所在目录为命令执行目录
//勾选Output框的Capture Output、输出被捕捉，如果勾选Paste Output，输出被粘贴
//勾选Control Group框中的Save Files First、SIS会在运行命令前先检查文件是否保存
//勾选Control Group框中的Pause When Done、SIS会在命令结束后暂停、方便检查
//勾选Source Links in Output框中的Parse Source Links，?/p> 文章分类: 开发工具






//#######################################################################################
//常用快捷列表SIv4.0
//#######################################################################################
/*

F8 高亮符号

完成语法                                :Ctrl+E
复制一行                                :Ctrl+K
恰好复制该位置右边的该行的字符          :Ctrl+Shift+K

复制到剪贴板                            :Ctrl+Del
剪切一行                                :Ctrl+U
剪切该位置右边的该行的字符              :Ctrl+;
剪切到剪贴板                            :Ctrl+Shift+X
剪切一个字                              :Ctrl+,

左边缩进                                :F9
右边缩进                                :F10
插入一行                                :Ctrl+I
加入一行                                :Ctrl+J

从剪切板粘贴                            :Ctrl+Ins
粘贴一行                                :Ctrl+P
重复上一个动作                          :Ctrl+Y
重新编号                                :Ctrl+R

重复输入                                :Ctrl+
替换                                    :Ctrl+H
智能重命名                              :Ctrl+''
关闭文件                                :Ctrl+W
关闭所有文件                            :Ctrl+Shift+W
新建                                    :Ctrl+N
转到下一个文件                          :Ctrl+Shift+N
打开                                    :Ctrl+O

重新装载文件                            :Ctrl+Shift+O
另存为                                  :Ctrl+Shift+S
显示文件状态                            :Shift+F10
激活语法窗口                            :Alt+L
回到该行的开始                          :Home
回到选择的开始                          :Ctrl+Alt+[
到块的下面                              :Ctrl+Shift+]
到块的上面                              :Ctrl+Shift+[

书签                                    :Ctrl+M
到选择部分的尾部                        :Ctrl+Alt+]
到下一个函数                            :小键盘 +
上一个函数                              :小键盘 -
后退                                    :Alt+,, Thumb 1 Click
后退到索引                              :Alt+M
向前                                    :Alt+., Thumb 2 Click

转到行                                  :F5, Ctrl+G
转到下一个修改                          :Alt+(KeyPad) +
转到下一个链接                          :Shift+F9,
回到前一个修改                          :Alt+(KeyPad) -
跳到连接(就是语法串口列表的地方)        :Ctrl+L
跳到匹配                                :Alt+]

选择一行                                :Shift+F6
选择句子(直到遇到一个 . 为止)           :Shift+F7, Ctrl+.
从当前位置选择到文件结束                :Ctrl+Shift+End
从当前位置选择到行结束                  :Shift+End
从当前位置选择到行的开始                :Shift+Home
从当前位置选择到文件顶部                :Ctrl+Shift+Home

选择一个单词                            :Shift+F5
选择左边单词                            :Ctrl+Shift+Left
选择右边单词                            : Ctrl+Shift+Right
排列语法窗口(有三种排列方式分别按1,2,3次)   :Alt+F7

移除文件                                :Alt+Shift+R
同步文件                                :Alt+Shift+S
增量搜索(当用Ctrl + F 搜索,然后按F12就会转到下一个匹配)         :F12
替换文件                                :Ctrl+Shift+H

向后搜索                                :F3
在多个文件中搜索                        :Ctrl+Shift+F
向前搜索                                :F4
搜索选择的(比如选择了一个单词,shift+F4将搜索下一个)       : Shift+F4


//#######################################################################################
//C/C++ 自动扩展 SIv4.0
//#######################################################################################


/*****************************************************************************
 * 以下几个宏支持自动生成块语句及插入标准头:
 * 假定你已经重载了AutoExpand 宏的快捷键为 CRTL+ENTER 
 * Usage: Keyword + [CRTL+ENTER] 
 ****************************配置宏(自动扩展)*********************************/
// 
// * config ----------------------------------------配置语言和作者名称及公司名称
// 
// ***********************标准头自动生成(自动扩展)******************************
// * file ------------------------------------------------自动生成标准文件头信息
// * func ------------------------------------------------自动生成标准函数头信息
// * hi --------------------------------------------------添加一条修改历史记录
// * hd ------------------------------------------------------自动生成函数头文件
// * hdn -----------------------------------------------------自动生成函数头文件
// 
// *************************语句块自动生成(自动扩展)****************************
// * {}-----------------------------------------------------------自动括号语句块
// * while---------------------------------------------------自动完成while语句块
// * if---------------------------------------------------------自动完成if语句块
// * for-------------------------------------------------------自动完成for语句块
// * do while---------------------------------------------自动完成do while语句块
// * switch-------------------------------------------------自动完成switch语句块
// * case-----------------------------------------------------自动完成case语句块
// * struct-------------------------------------------------自动完成struct语句块
// * enum-----------------------------------------------------自动完成enum语句块
// 
// *************************添加修改注释(自动扩展)******************************
// * #ifd---------------------------------------------------自动完成#ifdef语句块
// * #ifn--------------------------------------------------自动完成#ifndef语句块
// * #if-------------------------------------------------------自动完成#if语句块
// * cpp----------------------------------------------自动完成extern "C"语句块
// * ap---------------------------------------------------------添加一个问题单号
// * ab-----------------------------------------------------------添加--注释开始
// * ae-----------------------------------------------------------添加--注释结束
// * db------------------------------------------------------------删除-注释开始
// * de------------------------------------------------------------删除-注释结束
// * mb------------------------------------------------------------修改-注释开始
// * me------------------------------------------------------------修改-注释结束
// * abg--------------------------------------------------插入添加开始和结束说明
// * dbg--------------------------------------------------插入删除开始和结束说明
// 
// ************************语句块自动生成(菜单或快捷键)*************************
// * ComentCPPtoC----------------------------------将选中区域内//注释改为C++风格
// * ReplaceBufTab-------------------------------------将当前文件的TAB替换为空格
// * ReplaceTabInProj----------------------------------将当前项目的TAB替换为空格
// * InsertFuncName --------------------------------------插入当前所在的函数名称
// * FormatLine-----------------------------------------------自动分行格式化文字
// * UpdateFunctionList---------------------------------------自动生成函数头信息
// * DelCompoundStatement-------------------------------------符合语句块整个删除
// * FunctionHeaderCreate ------------------------------------------函数头的创建
// * HeaderFileCreate ------------------------------------插入当前所在的函数名称
// 
// ***********************插入调试块语句(菜单或快捷键)**************************
// * InsertTraceInfo--------------------------------------当前函数调插入调试语句
// * AutoInsertTraceInfoInBuf-------------------------------当前文件插入调试语句
// * AutoInsertTraceInfoInPrj-------------------------------当前工程插入调试语句
// * RemoveTraceInfo----------------------------------------删除当前函数调试语句
// * RemoveCurBufTraceInfo----------------------------------删除当前文件调试语句
// * RemovePrjTraceInfo-------------------------------------删除当前工程调试语句
// *****************************************************************************



//#######################################################################################
//SI 正则表达式      SIv4.0
//######################################################################################

//1.1 匹配单个任意字符 . (dot)
//1.2 行首和行尾 ^ and $
//1.3 匹配Tab 和Space
//    \t (tab character)
//    \s (space character)
//    \w (Tab or Space)
//1.4 匹配多个字符
//    * 多个前面一样字符(>=0 个)
//    + 多个前面一样字符(>=1 个)
//
//1.5 匹配一串字符 [ .. ]
//    [abc] matches a, b, and c, but not d.
//    [^abc] matches d, e, or f, but not a, b, or c.
//    [a-z] matches any character in the range a through z, but not A or 1 or 2.  
//    [a-zA-Z] matches any alphabetic character.
//    [^a-zA-Z0-9] matches any non-alphanumeric character.
//
//1.6 正则表达式组 \( and \) 包围
//    abc\(xyz\) matches abcxyz. xyz is considered group #1. 
//    This is not all that useful, unless we are using the Replace command. The replace string can contain 
//    group characters in the form of \<number>. Each time a group character is encountered in the 
//    replacement pattern, it means “substitute the group value from the matched pattern”.
//    
//    replace \(abc\)\(xyz\) with \2\1. This replaces the matched string abcxyz with the contents of
//    group #2 xyz, followed by the contents of group #1 abc. So abcxyz is replaced with xyzabc.
//    This is still not too amazing. See the next example.
//    
//    replace \(\w+\)\(.*\)ing with \1\2ed. This changes words ending in ing with the same word ending 
//    with ed. Your English teacher would not be too happy.
//
//
//1.7 特殊字符匹配(转义字符)
//    \ (backslash)
//    a\*b matches a*b literally

//工具简介
//代码    说明
//	.   匹配除换行符以外的任意字符
//	\w  匹配字母或数字或下划线
//	\s  匹配任意的空白符
//	\d  匹配数字
//	\b  匹配单词的开始或结束
//	^   匹配字符串的开始
//	$   匹配字符串的结束
//	常用限定符
//	代码/语法   说明
//	*   重复零次或更多次
//	+   重复一次或更多次
//	?   重复零次或一次
//	{n} 重复n次
//	{n,}    重复n次或更多次
//	{n,m}   重复n到m次
//	常用反义词
//	代码/语法   说明
//	\W  匹配任意不是字母，数字，下划线，汉字的字符
//	\S  匹配任意不是空白符的字符
//	\D  匹配任意非数字的字符
//	\B  匹配不是单词开头或结束的位置
//	[^x]    匹配除了x以外的任意字符
//	[^aeiou]    匹配除了aeiou这几个字母以外的任意字符
//
//一、校验数字的表达式
//	数字：^[0-9]*$
//	n位的数字：^\d{n}$
//	至少n位的数字：^\d{n,}$
//	m-n位的数字：^\d{m,n}$
//	零和非零开头的数字：^(0|[1-9][0-9]*)$
//	非零开头的最多带两位小数的数字：^([1-9][0-9]*)+(.[0-9]{1,2})?$
//	带1-2位小数的正数或负数：^(\-)?\d+(\.\d{1,2})?$
//	正数、负数、和小数：^(\-|\+)?\d+(\.\d+)?$
//	有两位小数的正实数：^[0-9]+(.[0-9]{2})?$
//	有1~3位小数的正实数：^[0-9]+(.[0-9]{1,3})?$
//	非零的正整数：^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
//	非零的负整数：^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$
//	非负整数：^\d+$ 或 ^[1-9]\d*|0$
//	非正整数：^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
//	非负浮点数：^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
//	非正浮点数：^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
//	正浮点数：^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
//	负浮点数：^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
//	浮点数：^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
//
//二、校验字符的表达式
//	汉字：^[\u4e00-\u9fa5]{0,}$
//	英文和数字：^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
//	长度为3-20的所有字符：^.{3,20}$
//	由26个英文字母组成的字符串：^[A-Za-z]+$
//	由26个大写英文字母组成的字符串：^[A-Z]+$
//	由26个小写英文字母组成的字符串：^[a-z]+$
//	由数字和26个英文字母组成的字符串：^[A-Za-z0-9]+$
//	由数字、26个英文字母或者下划线组成的字符串：^\w+$ 或 ^\w{3,20}$
//	中文、英文、数字包括下划线：^[\u4E00-\u9FA5A-Za-z0-9_]+$
//	中文、英文、数字但不包括下划线等符号：^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
//	可以输入含有^%&’,;=?$\”等字符：[^%&',;=?$\x22]+
//	禁止输入含有~的字符：[^~\x22]+

//	用元字符
//	.   	匹配除换行符以外的任意字符
//	\w  	匹配字母或数字或下划线
//	\s  	匹配任意的空白符
//	\d  	匹配数字
//	\b  	匹配单词的开始或结束
//	^   	匹配字符串的开始
//	$   	匹配字符串的结束
//
//	常用限定符
//	*   	重复零次或更多次
//	+   	重复一次或更多次
//	?   	重复零次或一次
//	{n} 	重复n次
//	{n,}    重复n次或更多次
//	{n,m}   重复n到m次
//
//	常用反义词
//	\W  	匹配任意不是字母，数字，下划线，汉字的字符
//	\S  	匹配任意不是空白符的字符
//	\D  	匹配任意非数字的字符
//	\B  	匹配不是单词开头或结束的位置
//	[^x]    匹配除了x以外的任意字符
//	[^aeiou]    匹配除了aeiou这几个字母以外的任意字符
//
//	常用模式修正符
//	代码 		语法   说明
//	i   	表示在进行匹配的时候不区分大小写
//	m   	多行识别.即将字符串视为多行,不管是那行都能匹配
//	s   	将字符串视为单行,转义回车换行符作为普通字符
//	g   	表示全局匹配
//	x   	将模式中的空白忽略
//	A   	强制从目标字符串开头匹配
//	D   	强制尾部无任何内容.若使用$限制结尾字符,则不允许结尾有换行
//	U   	禁止贪婪匹配,只匹配最近的一个字符串(不重复匹配)
//	e   	配合PHP函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行


//三、特殊需求表达式参考
//	Email地址：^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
//	域名：[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
//	InternetURL：[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
//	手机号码：^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
//	电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX)：^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$
//	国内电话号码(0511-4405222、021-87888822)：\d{3}-\d{8}|\d{4}-\d{7}
//	身份证号(15位、18位数字)：^\d{15}|\d{18}$
//	短身份证号码(数字、字母x结尾)：^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
//	帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$
//	密码(以字母开头，长度在6~18之间，只能包含字母、数字和下划线)：^[a-zA-Z]\w{5,17}$
//	强密码(必须包含大小写字母和数字的组合，不能使用特殊字符，长度在8-10之间)：^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
//	日期格式：^\d{4}-\d{1,2}-\d{1,2}
//	一年的12个月(01～09和1～12)：^(0?[1-9]|1[0-2])$
//	一个月的31天(01～09和1～31)：^((0?[1-9])|((1|2)[0-9])|30|31)$
//	钱的输入格式：
//	有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00″, 和没有 “分” 的 “10000″ 和 “10,000″：^[1-9][0-9]*$
//	这表示任意一个不以0开头的数字，但是，这也意味着一个字符”0″不通过，所以我们采用下面的形式：^(0|[1-9][0-9]*)$
//	一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号：^(0|-?[1-9][0-9]*)$
//	这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉，因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分：^[0-9]+(.[0-9]+)?$
//	必须说明的是，小数点后面至少应该有1位数，所以”10.”是不通过的，但是 “10″ 和 “10.2″ 是通过的：^[0-9]+(.[0-9]{2})?$
//	这样我们规定小数点后面必须有两位，如果你认为太苛刻了，可以这样：^[0-9]+(.[0-9]{1,2})?$
//	这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了，我们可以这样：^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
//	1到3个数字，后面跟着任意个 逗号+3个数字，逗号成为可选，而不是必须：^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
//	备注：这就是最终结果了，别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪，为什么?)最后，别忘了在用函数时去掉去掉那个反斜杠，一般的错误都在这里
//	xml文件：^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
//	中文字符的正则表达式：[\u4e00-\u9fa5]
//	双字节字符：[^\x00-\xff] (包括汉字在内，可以用来计算字符串的长度(一个双字节字符长度计2，ASCII字符计1))
//	空白行的正则表达式：\n\s*\r (可以用来删除空白行)
//	HTML标记的正则表达式：<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕，上面这个也仅仅能部分，对于复杂的嵌套标记依旧无能为力)
//	首尾空白字符的正则表达式：^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式)
//	腾讯QQ号：[1-9][0-9]{4,} (腾讯QQ号从10000开始)
//	中国邮政编码：[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
//	IP地址：\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
//	IP地址：((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)) (由@飞龙三少 提供，感谢共享)

